JavaScript
part 18/23 Β· 89.0 KB total
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
modules. Pour Γ©viter de polluer l'espace global, une mΓ©thode consistait
Γ encapsuler son code dans une fonction pour s'appuyer sur la portΓ©e des
variables qui a lieu au niveau des fonctions en JavaScript, puis Γ
invoquer cette fonction juste après. Pour regrouper les deux étapes
(dΓ©finition de la fonction et invocation) et ne pas ajouter un nom de
fonction supplΓ©mentaire dans l'espace global, le langage permet les
expressions de fonctions immΓ©diatement invoquΓ©es (EFII ; en anglais
immediately-invoked function expressions, IIFE)cite-ref-30[30].
Plusieurs syntaxes sont possibles pour ce type d'expression, les plus
rΓ©pandues Γ©tant :
pour sa lisibilitΓ©)cite-ref-31[31] ;
β’ (function (β¦) { β¦ })(β¦);
L'opΓ©rateur d'invocation de fonction () Γ la fin permet l'exΓ©cution
immΓ©diate de la fonction. Les parenthΓ¨ses en gras indiquent Γ
l'analyseur syntaxique qu'elles contiennent une expression, car en
JavaScript les parenthèses ne peuvent pas contenir de déclaration.
Autrement, dans la plupart des situations, le mot clΓ© function est
traitΓ© comme une dΓ©claration de fonction, et pas comme une expression de
fonction. Il existe d'autres faΓ§ons pour forcer une expression de
fonction :
β’ !function (β¦) { β¦ }(β¦);
β’ ~function (β¦) { β¦ }(β¦);
β’ -function (β¦) { β¦ }(β¦);
β’ +function (β¦) { β¦ }(β¦);
Dans les contextes oΓΉ une expression est attendue il n'est pas
nécessaire d'utiliser les parenthèses en gras :
β’ var maVariable = function (β¦) { β¦ }(β¦);
β’ true && function (β¦) { β¦ }(β¦);
β’ 0, function (β¦) { β¦ }(β¦);
Une utilisation importante des expressions de fonctions immΓ©diatement
invoquΓ©es est pour la crΓ©ation de modules. Les modules permettent Γ la
fois de rassembler des propriΓ©tΓ©s et des mΓ©thodes dans un espace de nom
et de rendre certains membres privΓ©s :
var compteur = (function () {
var i = 0; // propriΓ©tΓ© privΓ©e
return { // mΓ©thodes publiques
obtenir: function () {
alert(i);
},
mettre: function (valeur) {
i = valeur;
},
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ